// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Betida Casino Gids 2026 Uw Stap Voor Stap Handleiding – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Uw Welkomstpakket van Welvaren: Claim Uw $3.700 Bonus
Start uw reis met een royaal welkomstpakket. Betida Casino biedt een meerlagig systeem om uw speelervaring direct te versterken. Eenmaal geregistreerd, kunt u direct beginnen met het claimen van uw bonussen. Dit is een van de grootste welkomstpakketten die momenteel op de markt te vinden zijn. Bezoek speel nu om uw avontuur te starten. speel nu
Eerste Storting: 100% tot $1.000 + 100 Free Spins
Open het Kassier gedeelte.
Selecteer de stortingsmethode van uw keuze.
Voer een minimum storting van $10 in.
Gebruik promotiecode SLOTS in het daarvoor bestemde veld.
Bevestig uw storting.
Uw storting wordt direct verdubbeld, en 100 free spins op Bonanza Billion worden toegevoegd. Deze spins zijn uw eerste stap naar potentiële winsten.
Waarschuwing: Vergeet de promotiecode niet in te voeren. Zonder de code activeert het welkomstaanbod niet. Er is geen mogelijkheid om dit achteraf te corrigeren.
Tweede Storting: 120% tot $1.200
Ga opnieuw naar het Kassier gedeelte.
Voer uw storting in.
Gebruik promotiecode SG75.
Bevestig de transactie.
Deze storting wordt beloond met een hogere match percentage. Dit moedigt verdere betrokkenheid aan.
Derde Storting: 150% tot $1.500
Herhaal het proces in het Kassier.
Stort het gewenste bedrag.
Valideer de storting zonder speciale code.
De laatste bonus verhoogt uw speelgeld aanzienlijk. Deze aanbieding is gericht op het behouden van spelers op lange termijn.
“The Playthrough” Vereisten
Begrijp de inzetvereisten goed. De bonus vereist 35x de som van uw storting plus de bonus. Een storting van $100 met $100 bonus betekent $7.000 aan inzetvolume. Zorg dat u niet meer dan $5 per spin inzet tijdens de actieve bonusperiode. Meer inzetten kan leiden tot verlies van uw bonus.
Free spins winsten kennen een 40x inzetvereiste. De winsten hiervan zijn ook beperkt. Deze spins worden doorgaans gebruikt op populaire spellen van Pragmatic Play.
Betida Casino beloont loyaliteit met een gestructureerd 6-niveau VIP-programma. Dit systeem is ontworpen voor directe liquiditeit en bevat een unieke ‘BetBack’-functie. Elk spel dat u speelt, genereert een directe beloning, ongeacht of u wint of verliest. Dit begint al op Level 1.
BetBack: Geld terug bij elke inzet
In tegenstelling tot standaard cashback, ontvangt u BetBack direct op elke inzet. Het percentage van deze rebate groeit naarmate u hoger komt in de VIP-rangen. Dit betekent dat u altijd iets terugkrijgt voor uw spel.
Progressie en Beloningen
Niveau 1-2: Ontvang directe cash bonussen van $20 tot $50. U krijgt ook een 10% Real Cash Reload bonus.
Niveau 3-4: Uw maandelijkse opnamelimieten stijgen tot $20.000. U krijgt een persoonlijke VIP Manager toegewezen. Deze manager helpt u met specifieke verzoeken.
Niveau 5 (Elite): Voor de meest toegewijde spelers is er een beloning van $10.000 bij het bereiken van dit niveau. U ontvangt ook een 50% Real Cash Reload bonus. De maandelijkse opnamelimieten worden verhoogd tot $40.000.
Het bereiken van hogere niveaus zorgt voor aanzienlijke voordelen en een gepersonaliseerde service.
Snelle en Flexibele Betalingen: Crypto en Fiat
Het betalingssysteem van Betida Casino combineert de anonimiteit van crypto met de betrouwbaarheid van traditionele bankmethoden. Dit systeem is gebouwd voor de moderne speler die waarde hecht aan zowel privacy als gemak.
Stortingsopties: De Keuze is aan U
Cryptocurrencies: U kunt storten met Bitcoin (BTC), Ethereum (ETH), USDT (ERC20/TRC20), Solana (SOL) en Cardano (ADA). Crypto stortingen zijn snel en vereisen meestal geen onmiddellijke KYC-verificatie.
Fiat Valuta: Traditionele methoden zoals Visa, Mastercard, Skrill, Neteller, Jeton en MiFinity zijn ook beschikbaar.
Betida promoot een “No-ID” model bij registratie. Dit betekent dat u snel kunt beginnen met spelen zonder direct documenten te hoeven overleggen.
Opnamebeleid en KYC
De verplichte KYC-procedure wordt geactiveerd bij totale stortingen van $500 of bij uw eerste opnameverzoek. Dit is een standaardprocedure ter beveiliging. Crypto- en e-wallet uitbetalingen worden binnen 0-24 uur verwerkt. Bankoverschrijvingen via kaarten kunnen 1-3 werkdagen duren.
Duizenden Spellen: Van Slots tot Live Casino
Met meer dan 12.000 spellen biedt Betida Casino een ongeëvenaarde keuze. Meer dan 170 softwareproviders zijn vertegenwoordigd. U vindt hier zowel gevestigde klassiekers als de nieuwste releases.
Slot Spellen: Voor Elke Smaak
Ontdek een breed scala aan slots, van NetEnt’s tijdloze Starburst tot de intense actie van Hacksaw’s Wanted Dead or a Wild. Er is altijd een spel dat bij uw voorkeur past.
Live Casino: Realtime Actie
Meer dan 400 live tafels, aangedreven door Evolution en Pragmatic Play Live, wachten op u. Speel interactieve spelshows zoals Crazy Time en Lightning Roulette. De aanwezigheid van live dealers zorgt voor een authentieke casino-ervaring.
Speciale Spellen en Instant Winsten
Verken een sectie met “Provably Fair” spellen zoals Spribe’s Aviator. Er zijn ook “Fishing” simulators van JDB Gaming. Deze spellen spreken een groeiende groep spelers aan die op zoek zijn naar snelle, arcade-achtige gameplay.
De meeste spellen worden gehost op de servers van de providers. Dit garandeert de originele Return-to-Player (RTP) percentages. U speelt dus altijd met eerlijke kansen.
Innovatieve Functies en Sportweddenschappen
Betida Casino is meer dan alleen een plek voor casinospellen. Het platform biedt unieke tools en een uitgebreide sportsbook sectie.
AI Bet Mentor: Uw Persoonlijke Gids
Gebruik de AI Bet Mentor. Voer uw gewenste inzet en winstbedrag in. Het systeem suggereert vervolgens een meervoudige weddenschap. Deze suggesties zijn gebaseerd op historische data en waarschijnlijkheden.
Flash Markets: Wedden op het Moment
Voor de snelle wedder zijn er Flash Markets. Hiermee kunt u inzetten op zeer korte termijn uitkomsten. Denk aan: “Krijgen we binnen 30 seconden een inworp?”. Dit is perfect voor de moderne, actiegerichte speler.
eSports en Twitch Integratie
Volg en wed op eSports direct op het platform. Betida integreert live Twitch streams in de sportsbook interface. U kunt CS2, Dota 2 en Valorant wedstrijden bekijken en erop wedden zonder de site te verlaten.
Veiligheid en Licentie
Uw veiligheid is gegarandeerd. Betida Casino opereert onder een Curacao Licentie (nr. 161182). Het platform gebruikt 256-bits SSL-encryptie. Dit zorgt voor een veilige en gereguleerde omgeving voor alle spelers.